package com.sinog.biz.mapper.havexml;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sinog.core.domain.PrisonerHc;
import com.sinog.core.domain.PrisonerMain;
import com.sinog.core.model.PrisonerXjxxInVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * @desc 安置帮教管理 - 人员信息补录 - 信息录入
 * @author -
 * @date 2020-01-19-11:18
 */
public interface PrisonerMainMapper extends BaseMapper<PrisonerMain> {

    /**
     * 查询预安置人员信息录入列表
     * @param page 分页
     * @param querykey 查询条件
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getInmatesList(Page<Map<String,String>> page,@Param("params") Map<String,Object> querykey);

    /**
     * 预安置管理 - 预安置人员录入 - 信息录入 - 快捷查询 - 姓名重复人员列表
     * @param page page 分页
     * @param querykey 查询条件
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> nameRepetitionInfo(Page<Map<String,String>> page,
                                                @Param("params") Map<String,Object> querykey);

    /**
     * 安置帮教管理 - 人员信息补录 - 信息补录 - 列表
     * @param page 分页
     * @param querykey 查询条件
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getBlInmatesList(Page<Map<String,String>> page,
                                              @Param("params") Map<String,Object> querykey);

    /**
     * 查询生成的是罪犯编号是否存在
     * @param priNum 服刑人员编号
     * @return String
     */
    String existPriNum(String priNum);

    /**
     * 查询身份证号是否存在
     * @param idnum 身份证号
     * @param priNum 服刑人员编号
     * @return List<Integer>
     */
    List<Integer> existIdnum(@Param("idnum") String idnum,@Param("priNum") String priNum);

    /**
     * 监狱录入基本信息和服刑信息信息后将state改为1
     * @param prinum 服刑人员编号
     * @param state 更新状态值
     * @return int 受影响行数
     */
    int updateStateByPrinum(@Param("prinum") String prinum,@Param("state") String state);

    /**
     * 预安置管理 - 预安置人员录入 - 信息录入 - 删除(逻辑删除)
     * @param prinum 服刑人员编号
     * @return int 受影响行数
     */
    int updateDelFlagByPrinum(String prinum);

    /**
     * 修改主表衔接状态
     * @param prisonerMain prisonerMain
     * @return int
     */
    int updatePrisonerMainById(PrisonerMain prisonerMain);

    /**
     * 根据priNum查询服刑人员
     * @param priNum 服刑人员编号
     * @return PrisonerMain
     */
    PrisonerMain selectPrisonerMain(String priNum);

    /**
     * 预安置管理查看--基本信息
     * @param priNum 服刑人员编号
     * @return Map<String,Object>
     */
    Map<String,Object> getBaseInfoViewByPriNum(String priNum);

    /**
     * 双列管(检查居住地)
     * @param priNum 服刑人员编号
     * @return Map<String,Object>
     */
    Map<String,Object> checkplaceVill(String priNum);

    /**
     * 根据犯罪编号查询该罪犯基本信息和服刑信息必填项是不是全部填写完成
     * @param prinum 服刑人员编号 prinum
     * @return int
     */
    int getIsAll(String prinum);

    /**
     * 根据姓名和身份证查询主表是否存在数据
     * @param idNum 罪犯身份证信息
     * @param pName 罪犯姓名
     * @return 预释放服刑人员基本信息
     */
    PrisonerMain verifyIdNumer(@Param("idNum") String idNum,@Param("pName") String pName);

    /**
     * 判断数据库中是否有重复的安帮编号
     * @param priNum priNum
     * @return int
     */
    int getRepeatJbxx(@Param("priNum") String priNum);

    /**
     * 安置帮教管理 - 双列管 - 居住地 - 列表
     * @param page page
     * @param querykey querykey
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getSlgJzd(Page<Map<String,String>> page,@Param("params") Map<String,Object> querykey);

    /**
     * 户籍迁出、双列管信息--查看--基本信息
     * @param priNum priNum
     * @return Map<String,Object>
     */
    Map<String,Object> getBaseInfoViewByPriNumLg(@Param("priNum") String priNum);

    /**
     * 户籍迁出信息--查看--核查记录信息
     * @param priNum priNum
     * @return Map<String,Object>
     */
    Map<String,Object> getHcjlInfoViewByPriNum(@Param("priNum") String priNum);

    /**
     * 户籍迁出信息--查看--档案材料信息
     * @param priNum priNum
     * @return Map<String,Object>
     */
    Map<String,Object> getDaclInfoViewByPriNum(@Param("priNum") String priNum);

    /**
     * 重新发起衔接页面信息
     * @param priNum priNum
     * @return Map<String,Object>
     */
    Map<String,Object> getAgainXjPageInfo(String priNum);

    /**
     * 补录信息列表数据
     * 待衔接列表数据
     * 衔接中列表数据
     * 已衔接列表数据
     * 衔接失败列表数据
     * @param page 分页
     * @param prisonerXjxxInVo 搜索条件,衔接信息
     * @param searchmap 搜索条件
     * @param localCode localCode
     * @return 衔接信息列表数据
     */
    List<Map<String,String>> getXxblList(Page<Map<String,String>> page,
                                         @Param("prisonerXjxxInVo") PrisonerXjxxInVo prisonerXjxxInVo,
                                         @Param("searchmap") Map<String,Object> searchmap,
                                         @Param("localCode") String localCode);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 未衔接 - 列表数量查询
     * @param prisonerXjxxInVo 搜索条件,衔接信息
     * @param level 角色等级
     * @param searchmap 搜索条件
     * @return 衔接信息列表数量
     */
    long getWxjListCount(@Param("prisonerXjxxInVo") PrisonerXjxxInVo prisonerXjxxInVo,@Param("level") String level,@Param("searchmap") Map<String,Object> searchmap);

    /**
     * 预安置管理 - 预释放人员衔接 - 衔接中 - 未衔接 - 列表
     * @param page 分页
     * @param prisonerXjxxInVo 搜索条件,衔接信息
     * @param level 角色等级
     * @param searchmap 搜索条件
     * @return 衔接信息列表数据
     */
    List<Map<String,String>> getWxjList(Page<Map<String,String>> page,
                                        @Param("prisonerXjxxInVo") PrisonerXjxxInVo prisonerXjxxInVo,
                                        @Param("level") String level,@Param("searchmap") Map<String,Object> searchmap);

    /**
     * 预安置管理 - 预安置人员核查 - 列表
     * @param page mybatis分页
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param departid 当前登录用户机构编码
     * @param level 当前登录用户level
     * @param state 1:待核查 2:核查中 3:核查成功人员 4:核查失败人员 5:二次核查成功人员 7、上报人员 8、待比对人员
     * @param sexKey 性别
     * @param nameKey 姓名
     * @param hjKey 户籍类型 01:户籍完整人员、02:查不清户籍人员
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位 1监狱 2看守所 3社区矫正
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @param qitaKey 其他条件 1:三无人员2: 三假人员3: 危安犯人员4: 再犯罪倾向5: 涉黑，涉恶人员6 双列管人员7是否有未成年子女 8是否走访(工作台搜索条件)
     * @param hcType 核查类型  1:一次核查成功,2:二次核查成功,3:三次核查成功,4查不清户籍核查成功
     * @param searchMap 根据level组装转换参数
     * @param localCode localCode
     * @return String
     */
    List<Map<String,String>> getVerificationList(Page<Map<String,String>> page,
                                                 @Param("sortField") String sortField,@Param("sortOrder") String sortOrder,
                                                 @Param("departid") String departid,
                                                 @Param("level") String level,
                                                 @Param("state") String state,
                                                 @Param("sexKey") String sexKey,
                                                 @Param("nameKey") String nameKey,
                                                 @Param("hjKey") String hjKey,
                                                 @Param("inputSource") String inputSource,
                                                 @Param("zdbjKey") String zdbjKey,
                                                 @Param("shenKey") String shenKey,
                                                 @Param("zmKey") String zmKey,
                                                 @Param("fxKey") String fxKey,
                                                 @Param("qitaKey") List<String> qitaKey,
                                                 @Param("nativepro") String nativepro,
                                                 @Param("nativecity") String nativecity,
                                                 @Param("nativecou") String nativecou,
                                                 @Param("nativevill") String nativevill,
                                                 @Param("rjStartDate") String rjStartDate,
                                                 @Param("rjEndDate") String rjEndDate,
                                                 @Param("hcType") String hcType,
                                                 @Param("searchMap") Map<String,Object> searchMap,
                                                 @Param("localCode") String localCode);

    /**
     * 预安置管理 - 预安置人员核查 - 列表count
     * @param departid 当前登录用户机构编码
     * @param level 当前登录用户level
     * @param state 1:待核查 2:核查中 3:核查成功人员 4:核查失败人员 5:待办工作 6:已办工作
     * @param sexKey 性别
     * @param nameKey 姓名
     * @param hjKey 户籍类型 01:户籍完整人员、02:查不清户籍人员
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位 1监狱 2看守所 3社区矫正
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @param qitaKey 其他条件 1:三无人员2: 三假人员3: 危安犯人员4: 再犯罪倾向5: 涉黑，涉恶人员6 双列管人员7是否有未成年子女 8是否走访(工作台搜索条件)
     * @param hcType 核查类型  1:一次核查成功,2:二次核查成功,3:三次核查成功,4查不清户籍核查成功
     * @param searchMap searchMap
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @return String
     */
    long getVerificationListCount(
            @Param("departid") String departid,
            @Param("level") String level,
            @Param("state") String state,
            @Param("sexKey") String sexKey,
            @Param("nameKey") String nameKey,
            @Param("hjKey") String hjKey,
            @Param("inputSource") String inputSource,
            @Param("zdbjKey") String zdbjKey,
            @Param("shenKey") String shenKey,
            @Param("zmKey") String zmKey,
            @Param("fxKey") String fxKey,
            @Param("qitaKey") List<String> qitaKey,
            @Param("nativepro") String nativepro,
            @Param("nativecity") String nativecity,
            @Param("nativecou") String nativecou,
            @Param("nativevill") String nativevill,
            @Param("rjStartDate") String rjStartDate,
            @Param("rjEndDate") String rjEndDate,
            @Param("hcType") String hcType,
            @Param("searchMap") Map<String,Object> searchMap,
            @Param("sortField") String sortField,@Param("sortOrder") String sortOrder);

    /**
     * 预安置人员信息录入 - 基本信息(更新)
     * @param prinum prinum
     * @return PrisonerHc
     */
    PrisonerHc prisonerHcByPriNum(@Param("prinum") String prinum);

    /**
     * sfbadmin--系统管理--死数据列表
     * @param page mybatis分页
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @return String
     */
    List<Map<String,String>> getSsjList(Page<Map<String,String>> page,
                                        @Param("sortField") String sortField,
                                        @Param("sortOrder") String sortOrder,
                                        @Param("sexKey") String sexKey,
                                        @Param("nameKey") String nameKey,
                                        @Param("inputSource") String inputSource,
                                        @Param("zdbjKey") String zdbjKey,
                                        @Param("shenKey") String shenKey,
                                        @Param("zmKey") String zmKey,
                                        @Param("fxKey") String fxKey,
                                        @Param("nativepro") String nativepro,
                                        @Param("nativecity") String nativecity,
                                        @Param("nativecou") String nativecou,
                                        @Param("nativevill") String nativevill,
                                        @Param("rjStartDate") String rjStartDate,@Param("rjEndDate") String rjEndDate);

    /**
     * sfbadmin--系统管理--死数据列表count
     * @param page mybatis分页
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @return String
     */
    Long getSsjListCount(Page<Map<String,String>> page,
                         @Param("sortField") String sortField,
                         @Param("sortOrder") String sortOrder,
                         @Param("sexKey") String sexKey,
                         @Param("nameKey") String nameKey,
                         @Param("inputSource") String inputSource,
                         @Param("zdbjKey") String zdbjKey,
                         @Param("shenKey") String shenKey,
                         @Param("zmKey") String zmKey,
                         @Param("fxKey") String fxKey,
                         @Param("nativepro") String nativepro,
                         @Param("nativecity") String nativecity,
                         @Param("nativecou") String nativecou,
                         @Param("nativevill") String nativevill,@Param("rjStartDate") String rjStartDate,@Param("rjEndDate") String rjEndDate);

    /**
     * 拿到自动生成的测试账号所增加的pnum
     * @param maintenance 固定的
     * @param a 尾号
     * @return 犯罪包好集合
     */
    List<String> getAutoAccountPnum(String maintenance,String a);

    /**
     * 根据罪犯编号更新罪犯的行政区划
     * @param priNum 罪犯编号
     * @param nativePro 户籍省编码
     * @param nativeCity 户籍市编码
     * @param nativeCou 户籍区县编码
     * @param nativeVill 户籍街道编码
     * @param nativeproName 户籍省名称
     * @param nativecityName 户籍市名称
     * @param nativecouName 户籍区县名称
     * @param nativevillName 户籍街道名称
     * @return 保存条数
     */
    int updateAreaCodeByPriNum(
            @Param("priNum") String priNum,
            @Param("nativePro") String nativePro,
            @Param("nativeCity") String nativeCity,
            @Param("nativeCou") String nativeCou,
            @Param("nativeVill") String nativeVill,
            @Param("nativeproName") String nativeproName,
            @Param("nativecityName") String nativecityName,@Param("nativecouName") String nativecouName,@Param("nativevillName") String nativevillName);

    /**
     * 山西个性化需求:预安置人员管理 - 全部人员管理 - 统计总数
     * @param mapTem mapTem
     * @return Long
     */
    Long getQbryListCount(@Param("mapTem") Map<String,Object> mapTem);

    /**
     * 山西个性化需求:预安置人员管理 - 全部人员管理 - 查询列表
     * @param page 分页条件
     * @param mapTem mapTem
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getQbryList(
            @Param("page") Page<Map<String,String>> page,
            @Param("mapTem") Map<String,Object> mapTem,@Param("sortField") String sortField,@Param("sortOrder") String sortOrder);

    /**
     * 获取所有跨省数据的服刑人员编号
     * @param localCode localCode
     * @return List<Map<String,String>>
     */
    List<Map<String,String>> selectPrivinceInList(String localCode);

    /**
     * 获取由本省录入的外省数据
     * @param province province
     * @param localCode localCode
     * @return Map<String,String>
     */
    List<String> selectPrivinceOutList(@Param("province") String province,@Param("localCode") String localCode);

    /**
     * 获取所有服刑人员的户籍地址--处理脏数据使用
     * @return List<Map<String,String>>
     */
    List<Map<String,String>> selectNativeAddressForDirtyData(@Param("pageIndex") int pageIndex,@Param("pageSize") int pageSize);

    /**
     * 批量更新数据del_flag标识
     * @param priNums 需要更新的集合
     * @param flag del_flag标识   0：正常，-1：已删除，-2：脏数据
     */
    void batchUpdateDelFlag( @Param("priNums") List<String> priNums,@Param("flag") String flag);

    /**
     * 查询prisoner_main表中未被删除的数据量
     * @return int
     */
    Integer selectPrisonerMainCount();
}